#include<iostream>
#include<type_traits>
using namespace std;

template<long long n>
struct factorial : public integral_constant<long long, n * factorial<n - 1>::value>
{
};

template<>
struct factorial<0> : integral_constant<long long, 1>
{
};

int main(void)
{
	cout<< integral_constant<long, 1023>::value <<endl;
	cout<< factorial<10>::value <<endl;
	
	return 0;
}
